﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Media;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace _1_定时器
{
    public partial class FrmMain : Form
    {
        /// <summary>
        /// 定时计数器
        /// </summary>
        private int count;

        /// <summary>
        /// 存储设定的时间值
        /// </summary>
        private int time;

        #region 构造函数
        /// <summary>
        /// 构造函数
        /// </summary>
        public FrmMain()
        {
            InitializeComponent();
        }
        #endregion

        #region 程序加载事件
        /// <summary>
        /// 程序加载事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void FrmMain_Load(object sender, EventArgs e)
        {

            //初始下拉框的值
            for (int i = 1; i < 100; i++)
            {
                Duration_cob.Items.Add(i + "秒");
            }
            //将下拉框的值默认选中第一个
            Duration_cob.SelectedIndex = 0;
            //初始设置剩余时间为空
            Duration_txt.Text = "";
        }
        #endregion

        #region 时间事件
        /// <summary>
        /// 时间事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Clock_tr_Tick(object sender, EventArgs e)
        {
            count++;                                                    //开始累计时间
            Duration_txt.Text = (time - count).ToString() + "秒";       //获取剩余时间
            Time_bar.Value = count;                                     //设定信号槽的值

            //判断计时是否结束
            if (count == time)
            {
                Clock_tr.Stop();                                        //停止计时
                SystemSounds.Asterisk.Play();                           //播放提示音
                MessageBox.Show("时间到了！", "提示");                   //弹出消息框
                Duration_cob.Enabled = true;                            //激活下拉框
                StartOrStop_btn.Text = "开始计时";                      //将按钮文本更改为开始计时
            }
        }
        #endregion

        #region 点击开始计时按钮事件
        /// <summary>
        /// 点击开始计时按钮事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void StartOrStop_btn_Click(object sender, EventArgs e)
        {
            //开始或关闭计时
            TimeStartOrSeop();
        }
        #endregion

        #region 开始或关闭计时的方法
        /// <summary>
        /// 开始或关闭计时的方法
        /// </summary>
        private void TimeStartOrSeop()
        {
            //判断当前按钮状态是不是开始计时
            if (StartOrStop_btn.Text == "开始计时")
            {
                Clock_tr.Start();                                               //开始计时
                string str = Duration_cob.Text;                                 //声明选定时间的字符串
                time = Convert.ToInt16(str.Substring(0, str.Length - 1));       //转换选定时间的字符串为整型
                Time_bar.Maximum = time;                                        //将选定时间的值赋给信号槽最大值                
                StartOrStop_btn.Text = "停止计时";                              //将按钮的文本更改为停止计时
                Duration_cob.Enabled = false;                                   //设定下拉框属性为不可以
            }
            else
            {
                Clock_tr.Stop();                                                //停止计时
                StartOrStop_btn.Text = "开始计时";                              //将按钮的文本更改为开始计时
                Duration_cob.Enabled = true;                                    //激活下拉框
                count = 0;                                                      //重新初始计时器
                Time_bar.Value = count;                                         //重新初始信号槽
            }
        }
        #endregion
    }
}
